package org.wu.framework.lazy.database.datasource.proxy.util;

import org.wu.framework.core.utils.LazyProxyUtils;
import org.wu.framework.lazy.database.datasource.proxy.LazyProxyDataSource;
import org.wu.framework.lazy.database.datasource.proxy.LazyProxyDataSourceInvocationHandler;
import org.wu.framework.lazy.database.datasource.proxy.handler.JdbcHandlerAdapter;

import javax.sql.DataSource;

/**
 * description 代理数据源对象
 *
 * @author 吴佳伟
 * @date 2023/06/15 21:12
 */
public class LazyDataSourceProxyUtils {

    /**
     * 创建代理lazy 数据源
     *
     * @param dataSource 原始数据源
     * @return 代理后数据源
     */
    public static LazyProxyDataSource proxy(DataSource dataSource) {
        return proxy(dataSource, new JdbcHandlerAdapter());
    }

    /**
     * 创建代理lazy 数据源
     *
     * @param dataSource 原始数据源
     * @param jdbcHandlerAdapter 连接处理器
     * @return 代理后数据源
     */
    public static LazyProxyDataSource proxy(DataSource dataSource,
                                       JdbcHandlerAdapter jdbcHandlerAdapter) {

        if (!(dataSource instanceof LazyProxyDataSource) ||
                !(LazyProxyUtils.hasInvocationHandler(dataSource, LazyProxyDataSourceInvocationHandler.class))) {
            dataSource = LazyProxyDataSource.instance(dataSource, jdbcHandlerAdapter);
        }
        return (LazyProxyDataSource) dataSource;
    }

}
